package com.kaifamiao.service;

import com.kaifamiao.entity.User;
import com.kaifamiao.enums.UserType;
import com.kaifamiao.exception.ServiceException;

import java.util.Map;

public interface UserService {

    /**
     * 对指定字符串加盐后再加密
     * @param source 被加密的字符串
     * @param salt 盐值
     * @return 返回加密后的字符串
     */
    String encrypt(String source,String salt);

    /**
     * 保存用户到数据库中
     * @param user 被保存的用户
     * @return 当保存成功时返回 true
     * @throws ServiceException 当保存失败时抛出异常
     */
    boolean save(User user) throws ServiceException;

    /**
     * 根据用户编号查找用户
     * @param id 被查找用户的编号(即数据库主键)
     * @return 返回指定编号对应的用户对象
     * @throws ServiceException 若查询失败则抛出异常
     */
    User find(Integer id) throws ServiceException;

    /**
     * 根据 账号、邮箱、手机号 查询用户是否已存在
     * @param user 被查询的用户
     * @param type 表示被查询的类型，比如 查询账号、查询邮箱、查询手机号
     * @return 当 指定的 账号 或 邮箱 或 手机号已经存在于数据库时返回 true
     * @throws ServiceException 查询失败时抛出异常
     */
    Map<String,Object> exists(User user, UserType type) throws ServiceException;

    /**
     * 根据指定的用户信息查找对应的用户
     * @param user 携带了查询条件中所使用的数据的User实例
     * @param type 查询类型 ( 比如 根据邮箱查询、根据手机号查询、根据账号查询 )
     * @return 返回数据库中满足指定查询条件的用户数据; 若不存在则返回 null
     * @throws ServiceException 若查询失败则抛出异常
     */
    User find(User user, UserType type) throws ServiceException;

}
